﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BL;
using System.Data;
using System.Security;
using System.Web.Security;
using System.Web.SessionState;
using DAL;

namespace UI
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            try
            {
                if ((!IsPostBack))
                {
                    int Id_usuario = Convert.ToInt32(Session["Id_usuario"].ToString());
                    llenarMenu(Id_usuario);

                }
                else
                {
                    if (Menu_Principal.Items.Count == 0)
                    {
                        int Id_usuario = Convert.ToInt32(Session["Id_usuario"].ToString());
                        llenarMenu(Id_usuario);
                    }
                }
            }
            catch (Exception)
            {
                Response.Redirect("~/frmLogin.aspx");
            }
        }


        public void llenarMenu(int CodUsuario)
        {
            if ((CodUsuario != 0))
            {

               
                Usuario_DAL user = new Usuario_DAL();
                DataTable dtt = user.leerOpcionesmenu2(CodUsuario);
                
                DataTable dtMenuItems = dtt;

                //recorremos el datatable para agregar los elementos de que estaran en la cabecera del menú.
                foreach (System.Data.DataRow drMenuItem in dtMenuItems.Rows)
                {

                    //esta condicion indica q son elementos padre.
                    if (drMenuItem["COD_MENU"].Equals(drMenuItem["PadreId"]))
                    {
                        MenuItem mnuMenuItem = new MenuItem();
                        mnuMenuItem.Value = drMenuItem["COD_MENU"].ToString();
                        mnuMenuItem.Text = drMenuItem["MENU"].ToString();
                        
                        mnuMenuItem.NavigateUrl = drMenuItem["URL"].ToString();

                        //agregamos el Ítem al menú
                        Menu_Principal.Items.Add(mnuMenuItem);
                        //hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.
                        AddMenuItem(ref mnuMenuItem, dtMenuItems);
                    }
                }
            }
        }

        private void AddMenuItem(ref MenuItem mnuMenuItem, System.Data.DataTable dtMenuItems)
        {

            //recorremos cada elemento del datatable para poder determinar cuales son elementos hijos
            //del menuitem dado pasado como parametro ByRef.
            foreach (System.Data.DataRow drMenuItem in dtMenuItems.Rows)
            {
                if (drMenuItem["PadreId"].ToString().Equals(mnuMenuItem.Value) && !drMenuItem["COD_MENU"].Equals(drMenuItem["PadreId"]))
                {
                    MenuItem mnuNewMenuItem = new MenuItem();
                    mnuNewMenuItem.Value = drMenuItem["COD_MENU"].ToString();
                    mnuNewMenuItem.Text = drMenuItem["MENU"].ToString();
                    //mnuNewMenuItem.ImageUrl = drMenuItem["Icono"].ToString();
                    mnuNewMenuItem.NavigateUrl = drMenuItem["URL"].ToString();

                    //Agregamos el Nuevo MenuItem al MenuItem que viene de un nivel superior.
                    mnuMenuItem.ChildItems.Add(mnuNewMenuItem);

                    //llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                    AddMenuItem(ref mnuNewMenuItem, dtMenuItems);
                }
            }

        }
    }
}
